package com.eh.array;

import java.util.Arrays;

/**
 * 1. 向HighArray类添加一个名为getMax()方法，它返回数组中最大关键字的值，当数组为空时返回-1
 * <p>
 * 2. 不仅返回最大关键字，还能移除最大关键字，提供removeMax()
 * <p>
 * Created by David Li on 2016/3/22.
 */
public class HighArrayApp {
    public static void main(String[] args) {
        int[] intArr = new int[] { 3, 1, 5, 7, 4, 9, 2, 8, 7 };
    }

}

class HighArray {
    private int[] intArr;
    private int next;

    public HighArray(int capacity) {
        intArr = new int[capacity];
    }

    public HighArray() {
        this(16);
    }

    /**
     * 插入一个整数
     *
     * @param e
     */
    public void add(int e) {
        if (next == intArr.length) {
            intArr = Arrays.copyOf(intArr, intArr.length * 2);
        }
        intArr[next] = e;
    }

    /**
     * 查找一个整数
     */
    public int search(int num) {
        for (int i = 0; i < next - 1; i++) {
            if (num == intArr[i]) {
                return i;
            }
        }
        return -1;
    }

    /**
     * 获取最大值
     *
     * @return 最大值
     */
    public int getMax() {
        int maxNum = -1;
        for (int i = 0; i < intArr.length; i++) {
            if (maxNum <= intArr[i]) {
                maxNum = intArr[i];
            }
        }
        return maxNum;
    }

    /**
     * 删除最大值
     *
     * @return 最大值下标
     */
    public int removeMax() {
        int maxNum = -1;
        int maxIndex = -1;

        // 查找最大值及获得最大值下标
        for (int i = 0; i < intArr.length; i++) {
            if (maxNum <= intArr[i]) {
                maxNum = intArr[i];
                maxIndex = i;
            }
        }

        // 删除最大值
        for (int j = maxIndex; j < intArr.length; j++) {
            intArr[j] = intArr[j + 1];
        }
        next--;
        return maxIndex;
    }

    public void display() {
        for (int i = 0; i < intArr.length; i++) {
            System.out.printf("%-3d", intArr[i]);
        }
        System.out.println();
    }
}


